在分支觀念篇的文章中有介紹過,如果已經合併過的分支,即便刪除了也不會影響整個線圖,雖然當初是在講「地端分支」的觀念,但這個觀念其實也適用於「遠端分支」。
不過我們也曾經說過,地端分支跟遠端分支是要分開看待的,所以要刪除的分支如果也存在於遠端,那麼即便地端分支已經被刪除,遠端的分支並不會因此自動被刪除,我們會需要額外處理「刪掉遠端分支」這件事。
這篇文章,來說明如何刪除遠端分支,以及遠端分支被刪除之後,團隊成員需要注意的小地方。
刪除遠端分支的方式,一樣是使用 git push
指令,只要在使用指令時多加一個 --delete
即可。
git push origin --delete 分支名稱
或是使用 --delete
的簡寫 -d
:
git push origin -d 分支名稱
除了--delete
參數之外,也可以使用下面指令來刪除遠端分支:
git push origin :遠端分支名稱
這個神奇的指令的概念是將「空的分支」推到遠端已經存在的分支上,藉此把遠端分支刪除。
來做個實驗吧,我開啟兩個終端機視窗,模擬兩個開發者地端儲存庫的狀況。
左邊是 愛蜜莉雅
的工作視窗,右邊是 雷姆
的工作視窗。
愛蜜莉雅
的開發分支是 Emilia
,而 雷姆
的開發分支是 Rem
,由於 愛蜜莉雅
之前為了幫 雷姆
看他的開發內容,曾經把 Rem
分支拉回地端查看資料,所以 愛蜜莉雅
的地端儲存庫中也有 Rem
分支。
雷姆
剛把專案開發完成,她的 Rem
分支已經被合併回主要分支了,Rem
分支在地端與遠端都可以不用再出現。
此時 雷姆
需要執行兩個指令,分別刪除「地端」與「遠端」的分支:
git branch -d Rem
git push origin --delete Rem
# 或是
git push origin :Rem
執行完之後,打開遠端儲存庫的介面,確定沒有 Rem
分支了
注意這個行為是
雷姆
在她的專案中執行
此時我們回到 愛蜜莉雅
的專案上,執行查看所有分支的指令看看專案分支狀況:
git branch -a
愛蜜莉雅
的專案上, Rem
分支並不會自動被刪除!!
團隊協作上要有一個觀念,每個人的「地端儲存庫」都是獨立的,已經存在的地端分支,不會因為「遠端儲存庫」的遠端分支有什麼異動而受到任何影響!
唯一有辦法影響自己地端儲存庫資料的人,只有你自己。
銜接上面的例子,如果 愛蜜莉雅
知道 雷姆
的分支已經沒有要使用,而且 Rem
分支已經在遠端被刪除,她需要在自己的專案中做兩件事
Rem
分支git branch -d Rem
git fetch --prune
git fetch
指令,本身的作用是把所有「遠端分支」更新回地端「遠端追蹤分支」 的行為,不過如果遠端已經沒有分支,指令並不會主動把「遠端追蹤分支」刪除。
--prune
意思是修剪,把他加到 git fetch
指令後,整個指令就會去修剪已經不用存在的 「遠端追蹤分支」了
$ git fetch --prune
From https://github.com/imall/GitLearn
- [deleted] (none) -> origin/Rem
執行完這個指令後,「遠端追蹤分支」就不會再出現已經不存在的「遠端分支」囉!
$ git branch -r
origin/Emilia
origin/HEAD -> origin/main
origin/dev
origin/main
假設 雷姆
完成了她的開發,想透過 Fork GUI 把 「遠端分支」 刪除。
到 GUI 左下角,對著 Rem
遠端追蹤分支點右鍵,選到刪除選項:
跳出的視窗點 Delete
就完成了
操作如下:
愛蜜莉雅
要更新遠端已經被刪除的分支,在 Fork GUI 中點選左上角的 Fetch
按鈕即可:
操作如下:
總結一下這篇的重點
git fetch --prune
指令。